package com.ffggffgfv.backend.mapper;

import com.ffggffgfv.backend.entity.Admin;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 管理员数据访问层
 */
@Mapper
public interface AdminMapper {

    /**
     * 根据ID查询管理员
     *
     * @param id 管理员ID
     * @return 管理员对象
     */
    Admin selectById(Long id);

    /**
     * 根据用户名查询管理员
     *
     * @param username 用户名
     * @return 管理员对象
     */
    Admin selectByUsername(String username);

    /**
     * 查询所有管理员（支持分页和条件查询）
     *
     * @param username 用户名（可选）
     * @param status   状态（可选）
     * @param offset   偏移量
     * @param limit    限制数量
     * @return 管理员列表
     */
    List<Admin> selectByPage(@Param("username") String username,
                             @Param("status") Integer status,
                             @Param("offset") int offset,
                             @Param("limit") int limit);

    /**
     * 统计管理员总数
     *
     * @param username 用户名（可选）
     * @param status   状态（可选）
     * @return 管理员总数
     */
    long countAll(@Param("username") String username, @Param("status") Integer status);

    /**
     * 插入管理员
     *
     * @param admin 管理员对象
     * @return 影响行数
     */
    int insert(Admin admin);

    /**
     * 更新管理员
     *
     * @param admin 管理员对象
     * @return 影响行数
     */
    int update(Admin admin);

    /**
     * 更新管理员密码
     *
     * @param id         管理员ID
     * @param password   新密码
     * @param updateTime 更新时间
     * @return 影响行数
     */
    int updatePassword(@Param("id") Long id, @Param("password") String password, @Param("updateTime") Date updateTime);

    /**
     * 更新管理员状态
     *
     * @param id         管理员ID
     * @param status     新状态
     * @param updateTime 更新时间
     * @return 影响行数
     */
    int updateStatus(@Param("id") Long id, @Param("status") Integer status, @Param("updateTime") Date updateTime);
}
